package org.jeecg.modules.zhouAdmin.admin.orderCenterModule.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.degression.pojo.MlccPaidanOrderGongyi;
import org.jeecg.modules.zhouAdmin.admin.orderCenterModule.pojo.*;
import org.jeecg.modules.zhoupackage.pojo.*;

import java.util.List;

/**
 * 订单中心Service
 */
public interface IOrderCenterService {
    /**
     * 获取面料订单
     *
     * @param page      分页器
     * @param orderSn   订单编号
     * @param storeCode 门店编码
     * @param gysName   供应商名称
     * @param status    状态
     * @param date      时间
     * @return 分页数据
     */
    IPage<AdminFabricOrder> getFabricOrder(Page<AdminFabricOrder> page, String orderSn, String storeCode,
                                           String gysName, String status, String date, String end);

    /**
     * 面料订单立即接单
     *
     * @param orderSn 订单编号
     * @return 结果 int
     */
    int orderNow(String orderSn, String remark);

    /**
     * 个订订单立即接单
     *
     * @param orderSn 个订订单编号
     */
    int orderNowSingle(String orderSn);

    /**
     * 面料确认收货
     *
     * @param orderSn 订单编号
     * @return 结果 int
     */
    int theGoods(String orderSn);
/********************************分割线下方是个订************************************/

    /**
     * 获取个订订单
     *
     * @param page      分页器
     * @param orderSn   订单编号
     * @param storeCode 门店编码
     * @param gysName   供应商名称
     * @param status    订单状态
     * @param date      下单时间
     * @return 分页数据
     */
    IPage<AdminSingleOrder> getSingleOrder(Page<AdminSingleOrder> page, String orderSn, String storeCode,
                                           String gysName, String status, String date, String enddate);

/********************************分割线下方是团订************************************/

    /**
     * 获取团订订单
     *
     * @param page      分页器
     * @param orderSn   订单编号
     * @param storeName 门店名称
     * @param status    订单状态
     * @param date      下单时间
     * @return 分页数据
     */
    IPage<AdminTeamOrder> getTeamOrder(Page<AdminTeamOrder> page, String orderSn, String storeName,
                                       String status, String date, String enddate);

    /**
     * 获取个订订单详情
     *
     * @param orderSn
     * @return
     */
    MlccSingleOrderInfo getDingleOrderDetail(String orderSn);

    /**
     * 未支付订单的调价
     *
     * @param orderType 订单类型 3面料，0个订，1团订
     * @param orderSn   订单编号
     * @param price     设置的价格
     * @return
     */
    int pricing(Integer orderType, String orderSn, String price, String remark);

    /**
     * 获取异常订单列表
     *
     * @param page
     * @param orderSn
     * @param status
     * @param date
     * @return
     */
    IPage<MlccErrorOrder> listExceptionOrder(Page<MlccErrorOrder> page, String orderSn, String status, String date, String enddate);

    /**
     * 订单跟踪状态
     *
     * @param orderSn
     * @return
     */
    List<MlccTrackingOrder> getFabricOrderTracking(String orderSn, Integer orderType);

    /**
     * 订单售后记录跟踪（总后台）
     *
     * @param token     令牌
     * @param orderSn   订单编号
     * @param orderType 订单类型
     * @return 售后记录列表
     */
    IPage<MlccAfterSalesinfo> listTeamAfter(Page<MlccAfterSalesinfo> page, String token, String orderSn, Integer orderType);

    /**
     * 个订取产品状态跟踪列表
     *
     * @param orderSn 订单编号
     * @return
     */
    List<MlccTrackingProduct> listtrackingProduct(String orderSn);

    /**
     * 团订查询部门下人员
     *
     * @param orderSn
     * @return
     */
    JSONObject listDepartSmallPro(String orderSn);

    /**
     * 后台订单驳回
     *
     * @param orderType 订单类型
     * @param orderID   订单ID
     * @return
     */
    int rejectedOrder(Integer orderType, String orderID, String remark);

    /**
     * 立即发货
     *
     * @param orderSn   订单编号
     * @param yunNumber 运单号
     * @param orderType 订单类型
     * @return
     */
    int fahuoNow(String orderSn, String yunNumber, Integer orderType, String kuaidiid, String remark, String[] productid);

    /**
     * 完成订单
     *
     * @param orderSn   订单编号
     * @param orderType 订单类型 3:面料订单，0个订，1团订
     * @return
     */
    int finishOrder(String orderSn, Integer orderType);

    /**
     * 订单备库
     *
     * @param orderSn   订单编号
     * @param orderType 订单类型
     * @param remark    备注信息
     */
    int beikuOrder(String orderSn, Integer orderType, String remark);

    /**
     * 团订订单批次列表
     *
     * @param orderSn 订单编号
     * @return
     */
    List<TeamPackingEntity> listPacking(String orderSn);

    /**
     * 批次的立即发货
     *
     * @param packingID 批次ID
     * @param thirdSn   运单号
     * @param kdid      快递id
     * @param remark    发货的备注
     */
    int pixifahuoNow(String packingID, String thirdSn, String kdid, String remark);

    /**
     * 删除批次
     *
     * @param packingID 批次ID
     */
    int delPacking(String packingID);

    /**
     * 获取批次基本信息（详情）
     *
     * @param packingID 批次ID
     */
    TeamPackingEntity basePackingDetail(String packingID);

    /**
     * 获取批次下的装箱单列表和装箱单下的人员列表
     *
     * @param packingID 批次ID
     * @return
     */
    List<MlccBatchPackingInfo> listPackage(String packingID);

    /**
     * 导出装箱单人员列表
     *
     * @param id 装箱单id
     */
    List<BoxPersonEntity> getboxPersonFile(String id);

    /**
     * 获取装箱单下的人员列表
     *
     * @param id 装箱单id
     */
    List<BoxPersonEntity> listBoxPerson(String id);

    /**
     * 删除装箱单下的产品（删除关系表）
     *
     * @param id 装箱单产品关联表ID
     * @return
     */
    int delBoxPro(String id);

    /**
     * 新增批次
     *
     * @param departID    部门ID
     * @param packingName 批次名称
     * @param orderSn     订单编号
     * @return
     */
    int savePacking(String departID, String packingName, String orderSn);

    /**
     * 团订未发货人员名单
     *
     * @param orderSn 订单编号
     * @return 小产品列表
     */
    IPage<MyNotshipmentsEmp> listNotshipments(Page<MyNotshipmentsEmp> page, String orderSn, String productID);

    /**
     * 团订新增装箱单界面，根据批次ID查询产品列表
     *
     * @param batchID 批次ID
     */
    List<MlccProductInfo> getProductByBatchID(String batchID);

    /**
     * 团订新增装箱单，并往装箱单产品关联表添加记录
     *
     * @param batchID     批次ID
     * @param packingName 装箱单名称
     * @param remark      备注
     * @param productID   选中的小产品ID列表
     */
    int saveBox(String batchID, String packingName, String remark, String[] productID);

    /**
     * 根据装箱单ID获取基本信息
     *
     * @param packageID 装箱单ID
     */
    MlccBatchPackingInfo getBasePackageDEtail(String packageID);

    /**
     * 仅仅往装箱单下添加人员
     *
     * @param packageID 装箱单ID
     * @param productID 产品人员ID数组
     */
    int addPersononPackage(String packageID, String[] productID);

    /**
     * 查询本次售后的小产品
     *
     * @param page      分页器
     * @param afterCode 售后订单编号
     */
    IPage<MyAfterProduct> getAftersmallProduct(Page<MyAfterProduct> page, String afterCode);

    /**
     * 售后产品人员列表同意或拒绝
     *
     * @param afterOrderID 售后订单表ID
     * @param afterCode    售后订单编号
     * @param isAgree      是否同意 0 拒接，1同意
     * @param smallProIDS  选中的兄产品id数组
     */
    int agreeAfter(String afterOrderID, String remark, String afterCode, Integer isAgree, String[] smallProIDS);

    /**
     * 团订售后详情查询以及拒绝的人员
     *
     * @param afterOrderID
     */
    List<MlccTrackAfterOrder> listRefustProduct(String afterOrderID);

    /**
     * 团订售后已同意的小产品
     *
     * @param afterOrderID 售后订单ID
     */
    List<MlccTrackAfterOrder> listAgreeProduct(String afterOrderID);

    /**
     * 团订售后详情下的平台收货下数据
     *
     * @param afterOrderID 售后订单ID
     */
    List<MlccTrackAfterOrder> receiving(String afterOrderID);

    /**
     * 团订售后订单详情平台发货的【确认收货】 或 【提交】
     *
     * @param afterOrderID 售后订单表ID
     * @param trackAfterID 操作的售后订单跟踪表ID
     * @param type         0 提交，1 确认收货
     */
    int receiptsOrSubmit(String afterCode, String afterOrderID, String trackAfterID, Integer type, String remark);

    /**
     * 个订售后订单详情平台发货的【确认收货】 或 【提交】
     *
     * @param afterCode    售后订单编码
     * @param afterOrderID 售后订单表ID
     * @param trackAfterID 操作的售后订单跟踪表ID
     * @param type         0 提交，1 确认收货
     * @param remark       备注
     */
    int receiptsOrSubmitSingle(String afterCode, String afterOrderID, String trackAfterID, Integer type, String remark);

    /**
     * 产品已收列表
     *
     * @param afterCode 售后订单编号
     */
    List<MyAfterProduct> listProductget(String afterCode);

    /**
     * 更新产品状态
     *
     * @param id 售后产品ID
     */
    int updateAfterPro(String id, Integer status);

    /**
     * 根据批次名称查询批次基本信息
     *
     * @param orderSn   团订订单编号
     * @param batchName 批次名称
     */
    MlccTrackingTeamDepart getBatchByCode(String orderSn, String batchName);

    /**
     * 把已入库的产品添加到装箱单
     *
     * @param batchID    批次ID
     * @param packageID  装箱单ID
     * @param productIDS 选中的产品id数组
     */
    int addProductonBox(String batchID, String packageID, String[] productIDS);

    /**
     * 批次装箱的保存功能（在添加产品之后）
     *
     * @param adterCode    售后订单编号
     * @param remark       备注
     * @param afterOrderId 售后订单ID
     * @param packageid    装箱单id
     */
    int saveProInPPackage(String adterCode, String remark, String afterOrderId, String packageid);

    /**
     * 前端展示售后产品发货列表
     *
     * @param afterCode 售后订单编号
     */
    List<MyAfterProduct> outAfterPro(String afterCode);

    /**
     * 售后尺寸列表
     *
     * @param smallProid 售后小产品ID
     * @param afterCode  售后订单编号
     */
    List<MyBodySizeInfo> listAfterSize(String smallProid, String afterCode, Integer isafter);

    /**
     * 面料售后的同意或拒绝
     *
     * @param afterID 售后订单ID
     * @param remark  备注
     * @param isAgree 1拒绝，2通过审核
     */
    int fabricOrderAfterIsAagree(String afterID, String remark, Integer isAgree) throws Exception;

    /**
     * 面料、个订 订单售后已拒绝
     *
     * @param afterID 售后订单ID
     */
    List<MlccTrackAfterOrder> fabricAfterOrderRefuse(String afterID);

    /**
     * 面料、个订 订单售后已接受
     *
     * @param afterID 售后订单ID
     */
    List<MlccTrackAfterOrder> fabricAfterOrderAgree(String afterID);

    /**
     * 个订 订单售后后台发货
     *
     * @param afterID 售后订单ID
     */
    List<MlccTrackAfterOrder> isFahuo(String afterID);

    /**
     * 个订售后详情获取产品返修尺寸数据
     *
     * @param orderSn   个订订单编号
     * @param afterCode 售后订单编号
     */
    List<Myproduct> listSingleAfterProductSize(String orderSn, String afterCode);

    /**
     * 个订售后的同意或者拒绝
     *
     * @param afterID  售后订单ID
     * @param remark   填写的备注
     * @param isAgree  是否同意 1拒绝，2通过审核
     * @param saddress 收货地址
     * @param sperson  收货人
     * @param sphone   收货电话
     */
    int singlrAfterOrderIsAgree(String afterID, String remark, Integer isAgree, String saddress, String sperson, String sphone);

    /**
     * 个订售后，产品已收列表
     *
     * @param afterID 售后订单ID
     */
    MlccAfterSalesinfo SingleProGet(String afterID);

    /**
     * 个订售后更新产品状态
     *
     * @param afterTrackID 售后订单跟踪ID
     * @param status       产品状态
     */
    int updateSingleAfterOrder(String afterTrackID, String status);

    /**
     * 个订售后售后订单发货
     *
     * @param afterID 售后订单id
     * @param remark  备注
     * @param kdid    快递id
     * @param number  运单号
     */
    int sproductFahuo(String afterID, String remark, String kdid, String number);

    /**
     * 个订产品状态跟踪更新产品状态
     *
     * @param productID 产品ID
     * @param orderSn   个订订单编号
     */
    int updateProductStatus(String productID, String orderSn, Integer status, String name, String remark, String wrater);

    /**
     * 面料售后订单详情平台发货的【确认收货】 或 【提交】
     *
     * @param afterCode    售后订单编码
     * @param afterOrderID 售后订单表ID
     * @param trackAfterID 操作的售后订单跟踪表ID
     * @param type         0 提交，1 确认收货
     * @param remarks      备注
     */
    int fabricAafterupdate(String afterCode, String afterOrderID, String trackAfterID, Integer type, String remarks);

    /**
     * 面料售后的产品已收
     *
     * @param afterOrderID 售后订单ID
     */
    List<MlccTrackAfterOrder> fabricAafteryishou(String afterOrderID);

    /**
     * 换货的面料售后订单  发货
     *
     * @param afterOrderID 售后订单ID
     * @param number       运单号
     * @param trackid      需要发货的售后订单跟踪id
     */
    int fabricAfterFahuo(String afterOrderID, String number, String trackid, String kdid, String remake);

    /**
     * 个订订单成本 面料成本
     *
     * @param orderSn 个订订单成本
     */
    List<MlccFabricInfo> SingleChengbenFabric(String orderSn);

    /**
     * 团订订单的面料成本
     *
     * @param orderSn 团订订单编号
     */
    List<MlccFabricInfo> teamFabricCB(String orderSn);

    /**
     * 供应商派单之后，插入加价成本列表数据（个订）
     *
     * @param orderSn 订单编号
     * @param gysid   供应商ID
     * @return int
     */
    int savePaidanChengben(String orderSn, String gysid);

    /**
     * 供应商派单之后，插入工艺成本数据（个订）
     *
     * @param orderSn 订单编号
     * @param gysid   供应商ID
     * @return int
     */
    @Deprecated
    int savePaidanGY(String orderSn, String gysid);

    /**
     * 供应商派单之后，插入成本列表数据（团订）
     *
     * @param orderSn 订单编号
     * @param gysid   供应商ID
     * @return int
     */
    int savePaidanChengbenTean(String orderSn, String gysid);

    /**
     * 供应商派单之后，插入工艺成本数据（团订）
     *
     * @param orderSn 订单编号
     * @param gysid   供应商ID
     * @return int
     */
    int savePaidanGYTeam(String orderSn, String gysid);

    /**
     * 获取订单下的加价成本
     *
     * @param page    分页器
     * @param orderSn 订单编号
     */
    IPage<MlccPaidanOrderCost> getJiajiaCB(Page<MlccPaidanOrderCost> page, String orderSn);

    /**
     * 获取订单下的工艺成本
     *
     * @param page    分页器
     * @param orderSn 订单编号
     */
    IPage<MlccPaidanOrderGongyi> getGYCB(Page<MlccPaidanOrderGongyi> page, String orderSn);

    /**
     * 获取订单下的返修成本 (个订与团订通用)
     *
     * @param page    分页器
     * @param orderSn 订单编号
     */
    IPage<MlccPaidanOrderAfter> getFanxiuCB(Page<MlccPaidanOrderAfter> page, String orderSn);

    /**
     * 返修的时候保存返修成本
     *
     * @param afterCode 售后订单编号
     * @param productID 产品ID
     * @param sizeID    返修尺寸id
     * @param orderSn   订单编号
     * @param sizename  尺寸名称
     * @param smallCode 小产品编号
     */
    int saveFanxiuChengben(String afterCode, String productID, String sizeID, String orderSn, String sizename, String smallCode);

    /**
     * 启用返修的成本项（个订团订都可以使用）
     *
     * @param orderSn   订单编号
     * @param afterCode 售后订单编号
     */
    void takeonFanxiuChengben(String orderSn, String afterCode);

    /**
     * 获取快递信息
     */
    List<MlccCourierInfo> getKuaidi();

    /**
     * 产品选择供应商
     *
     * @param proid 产品id
     * @param gysid 供应商id
     */
    int selectGYS(String proid, String gysid);

    /**
     * 面料售后详情——后台发货的数据
     *
     * @param id 售后订单id
     */
    List<MlccTrackAfterOrder> fabricAdminFahuo(String id);

    /**
     * 面料售后详情——退款记录
     *
     * @param id 售后订单id
     */
    List<MlccTrackAfterOrder> fabrictuikuan(String id);

    /**
     * 完成订单
     *
     * @param orderSn 订单编号
     * @param type    0面；1个，2团
     */
    int orderOk(String orderSn, Integer type);

    /**
     * 完成售后订单
     *
     * @param id 售后订单id
     */
    int afterOK(String id);

    /**
     * 更新面料的售后价格
     *
     * @param price   价格
     * @param afterid 售后订单id
     */
    int updateFabricAfterPrice(String afterid, String price);

    /**
     * 团体订单编辑批次删除装箱单
     *
     * @param boxid 装箱单id
     */
    int deleteBox(String boxid);


    /**
     * 团订获取重做的面料列表
     *
     * @param afterCode 售后订单编号
     */
    List<MlccFabricInfo> tramAfterFabriclIst(String afterCode);

    /**
     * 小产品详情
     *
     * @param id 小产品id
     */
    MlccCustomerProductInfo smallProDetail(String id);
}
